package cn.seaboot.admin.security.auth;

/**
 * 权限类型
 *
 * @author Mr.css
 * @version 2022-01-19 15:34
 */
public class AuthorityType {
    private AuthorityType() {
    }

    /**
     * 永远返回 true
     */
    public static final String PERMIT_ALL = "permitAll";

    /**
     * 永远返回 false
     */
    public static final String DENY_ALL = "denyAll";
    /**
     * 经过登录之后可访问
     */
    public static final String AUTHENTICATED = "authenticated";

    /**
     * 匿名访问，当前用户是 anonymous 时返回 true
     *
     * 包含一个逻辑：正常用户反而看不到匿名用户的界面
     * <p>
     * Returns true if the current principal is an anonymous user
     */
    public static final String ANONYMOUS = "anonymous";

    /**
     * 当前用户是 remember me 时返回 true rememberMe
     */
    public static final String REMEMBER_ME = "rememberMe";


    /**
     * 当前用户既不是 anonymous 也不是 rememberMe 用户时返回 true
     */
    public static final String FULL_AUTHENTICATED = "fullAuthenticated";


    /**
     * 来自指定 IP 表达式的用户可访问
     */
    public static final String HAS_ID_ADDRESS = "hasIpAddress";

    /**
     * 拥有指定角色的用户可访问，角色将被增加 “ROLE_” 前缀
     */
    public static final String HAS_ROLE = "hasRole";

    /**
     * 拥有指定任一角色的用户可访问
     */
    public static final String HAS_ANY_ROLE = "hasAnyRole";

    /**
     * 拥有指定任一权限(authority)的用户可访问
     */
    public static final String HAS_AUTHORITY = "hasAuthority";

    /**
     * 拥有指定权限(authority)的用户可访问
     */
    public static final String HAS_ANY_AUTHORITY = "hasAnyAuthority";

    /**
     * 当 Spring EL 表达式的执行结果为 true 时，可以访问
     */
    public static final String ACCESS = "access";
}
